package com.zw.mes.module.system.service;

import com.zw.mes.constant.Constant;
import com.zw.mes.entity.sys.Menu;
import com.zw.mes.module.system.mapper.MenuMapper;
import com.zw.mes.module.system.repository.MenuRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

import static com.zw.mes.constant.Constant.STATUS_NORMAL;


/**
 * @Description:
 *
 * @Author: China.sgl
 * @Date: 2019/12/6 08:42
 */
@Service
@SuppressWarnings("all")
public class MenuService {

    @Autowired
    private MenuMapper menuMapper;
    @Autowired
    private MenuRepository menuRepository;

    /**
     * 查询帐户拥有权限
     *
     * @param userId 用户id
     * @return List
     */
    public List<Menu> findMenuByUserId(Integer userId) {
        return menuMapper.findByUserId(userId);
    }

    /**
     * 按条件查询所有权限
     *
     * @param menu 条件
     * @return List
     */
    public List<Menu> findMenuByCondition(Menu menu) {
        return menuMapper.findByCondition(menu);
    }

    /**
     * 查询所有权限
     *
     * @return List
     */
    public List<Menu> findAll() {
        return menuMapper.findAll();
    }

    /**
     * 修改权限
     *
     * @param Menu 权限信息
     * @return 影响行数
     */
    public Menu updateMenu(Menu menu) {
        menu.setStatus(STATUS_NORMAL);
        return menuRepository.saveAndFlush(menu);
    }

    /**
     * 按权限码查询权限
     *
     * @param code 权限码
     * @return 权限信息
     */
    public Menu findMenuByCode(String code) {
        return menuMapper.findByCode(code);
    }

    /**
     * 保存权限信息
     *
     * @param menu 权限信息
     * @return 影响行数
     */
    public Menu saveMenu(Menu menu) {
        menu.setStatus(STATUS_NORMAL);
        return menuRepository.save(menu);
    }

    /**
     * 查询角色所有权限，村识拥有权限
     *
     * @param id 角色 id
     * @return List
     */
    public List<Menu> findMenuCheckedByRoleId(Integer id) {
        List<Menu> all = menuMapper.findAll();
        List<Menu> roleMenu = menuMapper.findByRoleId(id);
        for (Menu menu : all) {
            for (Menu m : roleMenu) {
                if (menu.getId().equals(m.getId())) {
                    menu.setCheckFlag(true);
                    break;
                }
            }
        }
        return all;
    }

    /**
     * 删除权限
     *
     * @param id id
     * @return 影响行数
     */
    public int delMenu(Integer id) {
        return menuMapper.updateStatusByIdWithRecursion(id, Constant.STATUS_DELETE);
    }
}
